/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Bean;

import Controller.ProdutoDAO;
import Model.Produto;
import java.util.ArrayList;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import org.primefaces.context.RequestContext;

/**
 *
 * @author iron
 */
@ManagedBean(name="produto")
@SessionScoped
public class ProdutoMBean {
    Produto obj;
    
    ArrayList<Produto> produtosFiltrados;
    Produto produtoEscolhido;
    public ProdutoMBean(){
        init();
    }

    public void Salvar(ActionEvent event){
        if(!validaCampos())
            return;
        try{
            ProdutoDAO.INSTANCE.insert(obj.getNome(), obj.getLote(), obj.getFornecedor(),obj.getFabricante(), obj.getValor(), obj.getTipo(), obj.getExigeReceita());
            VendaMBean.listaProdutos = ProdutoDAO.INSTANCE.getListaProdutos();
        }catch(Exception ex){
            ex.printStackTrace();
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Falhou!"));
            return;
        }finally{
            init();            
        }
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Cadastro Concluido com Sucesso"));
        System.out.println("Cadastro CONCLUIDO com sucesso!");
    }
    
    public Produto getObj() {
        return obj;
    }

    public void setObj(Produto obj) {
        this.obj = obj;
    }

    private boolean validaCampos() {
        boolean retorno = true;
        
        if(obj.getNome().isEmpty()){
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,"Insira o Nome do Produto.",null));
            retorno = false;
        }
        
        if(obj.getLote().isEmpty()){
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,"Insira o Lote do Produto.",null));
            retorno = false;
        }
        if(obj.getFornecedor().isEmpty()){
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,"Insira o Fornecedor do Produto.",null));
            retorno = false;
        }
        if(obj.getFabricante().isEmpty()){
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,"Insira o Fabricante do Produto.",null));
            retorno = false;
        }
        if(obj.getValor() == null || obj.getValor()==0){
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,"Insira o Valor Correto do Produto.",null));
            retorno = false;
        }
        return retorno;
    }

    private void init() {
        obj = new Produto();
        obj.setTipo('C');
        obj.setExigeReceita(false);
    }
    
    public void deletar(ActionEvent evt){
        if(produtoEscolhido == null){
            FacesContext.getCurrentInstance().addMessage(null,new FacesMessage(FacesMessage.SEVERITY_ERROR,"Escolha um produto para remover.",null));
            return;
        }
        try{
            ProdutoDAO.INSTANCE.delete(produtoEscolhido.getId());
            VendaMBean.listaProdutos = ProdutoDAO.INSTANCE.getListaProdutos();
        }catch(Exception ex){
            ex.printStackTrace();
            FacesContext.getCurrentInstance().addMessage(null,new FacesMessage(FacesMessage.SEVERITY_ERROR,"Ocorreu um erro inesperado.",null));
        }
        
         FacesContext.getCurrentInstance().addMessage(null,new FacesMessage(FacesMessage.SEVERITY_INFO,"Produto Removido com sucesso!",null));
    }

    

    public ArrayList<Produto> getProdutosFiltrados() {
        return produtosFiltrados;
    }

    public void setProdutosFiltrados(ArrayList<Produto> produtosFiltrados) {
        this.produtosFiltrados = produtosFiltrados;
    }

    public Produto getProdutoEscolhido() {
        return produtoEscolhido;
    }

    public void setProdutoEscolhido(Produto produtoEscolhido) {
        this.produtoEscolhido = produtoEscolhido;
    }
    
    
    
    
}
